import javax.swing.*;
import java.awt.*;
import javax.swing.table.*;
import java.awt.event.*;
import java.sql.*;
import java.util.*;
import java.text.*;

public class proses_peminjaman extends JInternalFrame {
  JPanel panel_data = new JPanel();
  JLabel jLabel1 = new JLabel();
  JTextField data_no_anggota = new JTextField();
  JTextField data_nama_anggota = new JTextField();
  JTable tabel_buku = new JTable();
  JTextField data_tgl_pinjam = new JTextField();
  JTextField data_tgl_kembali = new JTextField();
  JButton tombol_simpan = new JButton();
  JButton tombol_hapus = new JButton();
  JLabel no_anggota = new JLabel();
  JLabel nama_anggota = new JLabel();
  JLabel tgl_pinjam = new JLabel();
  JLabel tgl_kembali = new JLabel();
  JScrollPane scroll_panel = new JScrollPane();
  DefaultTableModel tabMode;
  JLabel status_pinjam = new JLabel();
  JTextField data_kode_buku = new JTextField();
  JLabel kode_buku = new JLabel();

  public proses_peminjaman() {
    super(".:: Form Peminjaman Buku ::.");
    tampilanGUI();
    listener_komponen_teks();
    listener_tombol();
  }

  void tampilanGUI() {
    jLabel1.setText(
        "Create by Midiyaqa ( Group 2");
    no_anggota.setHorizontalAlignment(SwingConstants.RIGHT);
    no_anggota.setText("No. Anggota :");
    nama_anggota.setHorizontalAlignment(SwingConstants.RIGHT);
    nama_anggota.setText("Nama Anggota :");
    kode_buku.setHorizontalAlignment(SwingConstants.RIGHT);
    kode_buku.setText("Kode Buku :");
    tgl_pinjam.setHorizontalAlignment(SwingConstants.RIGHT);
    tgl_pinjam.setText("Tanggal Peminjaman :");
    tgl_kembali.setHorizontalAlignment(SwingConstants.RIGHT);
    tgl_kembali.setText("Tanggal Pengembalian :");


    panel_data.setBorder(BorderFactory.createRaisedBevelBorder());
    panel_data.setLayout(null);

    no_anggota.setBounds(new Rectangle(0, 10, 100, 20));
    nama_anggota.setBounds(new Rectangle(0, 40, 100, 20));
    tgl_pinjam.setBounds(new Rectangle(0, 230, 120, 20));
    tgl_kembali.setBounds(new Rectangle(0, 260, 120, 20));
    kode_buku.setBounds(new Rectangle(0, 90, 100, 20));
    data_no_anggota.setBounds(new Rectangle(105, 10, 70, 21));
    data_nama_anggota.setEnabled(false);
    data_nama_anggota.setBounds(new Rectangle(105, 40, 236, 21));
    data_kode_buku.setEnabled(false);
    data_kode_buku.setBounds(new Rectangle(105, 90, 75, 20));
    data_tgl_pinjam.setEnabled(false);
    data_tgl_pinjam.setBounds(new Rectangle(125, 230, 120, 21));
    data_tgl_kembali.setEnabled(false);
    data_tgl_kembali.setBounds(new Rectangle(125, 260, 120, 21));

    scroll_panel.setBorder(BorderFactory.createLoweredBevelBorder());
    scroll_panel.setBounds(new Rectangle(10, 120, 500, 100));
    Object[] row = {"Kode Buku", "Judul Buku", "Nama Pengarang",
                   "Nama Penerbit"};
    tabMode = new DefaultTableModel(null, row);
    tabel_buku.setModel(tabMode);

    tombol_simpan.setBounds(new Rectangle(10, 310, 90, 25));
    tombol_simpan.setEnabled(false);
    tombol_hapus.setBounds(new Rectangle(110, 310, 90, 25));
    tombol_hapus.setEnabled(false);
    tombol_simpan.setText("Simpan");
    tombol_hapus.setText("Hapus");

    status_pinjam.setFont(new java.awt.Font("Dialog", 1, 14));
    status_pinjam.setText("Maaf, Masih Ada buku yang belum dikembalikan");
    status_pinjam.setVisible(false);
    status_pinjam.setBounds(new Rectangle(190, 79, 500, 30));
    panel_data.add(tombol_simpan);
    panel_data.add(tombol_hapus);
    panel_data.add(data_no_anggota);
    panel_data.add(data_nama_anggota);
    panel_data.add(no_anggota);
    panel_data.add(nama_anggota);
    panel_data.add(tgl_pinjam);
    panel_data.add(data_tgl_kembali);
    panel_data.add(tgl_kembali);
    panel_data.add(scroll_panel);
    panel_data.add(data_tgl_pinjam);
    panel_data.add(status_pinjam, null);
    panel_data.add(data_kode_buku, null);
    panel_data.add(kode_buku, null);

    scroll_panel.getViewport().add(tabel_buku);

    this.getContentPane().add(panel_data, BorderLayout.CENTER);
    this.getContentPane().add(jLabel1, BorderLayout.SOUTH);

  }

  public void listener_komponen_teks() {
    data_no_anggota.setDocument(new saring_karakter().getOnlyDigit());
    data_no_anggota.addKeyListener(new KeyAdapter() {
      public void keyReleased(KeyEvent e) {
        if (data_no_anggota.getText().length() >= 6) {
          data_no_anggota.setText(data_no_anggota.getText().substring(0, 6));
          Connection kon = new koneksi_database().koneksiDatabase();
          boolean ada_data = false;
          try {
            String sql = "Select * from data_anggota where no_anggota = '" +
                         data_no_anggota.getText() + "'";
            PreparedStatement st = kon.prepareStatement(sql);
            ResultSet rs = st.executeQuery();
            while (rs.next()) {
              data_nama_anggota.setText(rs.getString("nama"));
              ada_data = true;
            }
            st.close();
          }
          catch (SQLException swl) {}
          if (ada_data == true) {
            hapusTabel();
            boolean pinjam_buku = true;
            try {
              String sql = "Select * from data_peminjaman Where no_anggota = '" +
                           data_no_anggota.getText() + "'";
              PreparedStatement state = kon.prepareStatement(sql);
              ResultSet rs = state.executeQuery();
              while (rs.next()) {
                String kode_buku = rs.getString("kode_buku");
                String judul_buku = rs.getString("judul_buku");
                String nama_pengarang = rs.getString("nama_pengarang");
                String nama_penerbit = rs.getString("nama_penerbit");
                Object[] data = {kode_buku, judul_buku, nama_pengarang,
                                nama_penerbit};
                tabMode.addRow(data);
                pinjam_buku = false;
                status_pinjam.setVisible(true);
                data_kode_buku.setEnabled(false);
                data_tgl_kembali.setText(rs.getString("tgl_kembali"));
                data_tgl_pinjam.setText(rs.getString("tgl_pinjam"));
              }
              state.close();
            }
            catch (SQLException swl) {}
            if (pinjam_buku == true) {
              data_no_anggota.setEnabled(false);
              data_kode_buku.setEnabled(true);
              data_kode_buku.requestFocus();
              status_pinjam.setVisible(false);
            }
          }
          else {
            JOptionPane.showMessageDialog(null, "Data Anggota Tidak Ditemukan");
            data_no_anggota.setEnabled(true);
            data_no_anggota.setText("");
            data_nama_anggota.setText("");
            data_tgl_kembali.setText("");
            data_tgl_pinjam.setText("");
            status_pinjam.setVisible(false);
            data_kode_buku.setEnabled(false);
            data_no_anggota.requestFocus();
            hapusTabel();
          }
        }
      }
    });

    data_kode_buku.setDocument(new saring_karakter().getToUpperCase());
    data_kode_buku.addKeyListener(new KeyAdapter() {
      public void keyReleased(KeyEvent e) {
        if (data_kode_buku.getText().length() >= 8) {
          data_kode_buku.setText(data_kode_buku.getText().substring(0, 8).
                                 toUpperCase());
          Connection kon = new koneksi_database().koneksiDatabase();
          boolean ada_data = false;
          try {
            String sql = "Select * from data_buku where kode_buku = '" +
                         data_kode_buku.getText() + "'";
            PreparedStatement st = kon.prepareStatement(sql);
            ResultSet rs = st.executeQuery();
            while (rs.next()) {
              String judul = rs.getString("judul_buku");
              String penulis = rs.getString("nama_pengarang");
              String penerbit = rs.getString("nama_penerbit");
              ada_data = true;
              Object[] data = {data_kode_buku.getText(), judul, penulis,
                              penerbit};
              tabMode.addRow(data);

              data_kode_buku.setText("");
              data_kode_buku.setEnabled(true);
              data_kode_buku.requestFocus();
              tombol_simpan.setEnabled(true);
              tanggal();
            }
            st.close();
            kon.close();
          }
          catch (SQLException swl) {}
          if (ada_data == false) {
            JOptionPane.showMessageDialog(null, "Data Buku Tidak Ditemukan");
            data_kode_buku.setText("");
            data_kode_buku.setEnabled(true);
            data_kode_buku.requestFocus();
          }
        }
      }
    });

  }

  public void listener_tombol() {
    tombol_simpan.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        int nilai_pesan = JOptionPane.showConfirmDialog(null,
            "Anda yakin ingin menyimpan data peminjaman buku",
            "Konfirmasi Save", JOptionPane.YES_NO_OPTION);
        if (nilai_pesan == 0) {
          Connection kon = new koneksi_database().koneksiDatabase();
          int jml_row = tabel_buku.getRowCount();
          for (int i = 0; i < jml_row; i++) {
            try {
              String sql = "INSERT INTO data_peminjaman values (?,?,?,?,?,?,?)";
              PreparedStatement st = kon.prepareStatement(sql);
              try {
                st.setString(1, data_no_anggota.getText());
                st.setString(2, tabMode.getValueAt(i, 0).toString());
                st.setString(3, tabMode.getValueAt(i, 1).toString());
                st.setString(4, tabMode.getValueAt(i, 2).toString());
                st.setString(5, tabMode.getValueAt(i, 3).toString());
                st.setString(6, data_tgl_kembali.getText());
                st.setString(7, data_tgl_kembali.getText());
                st.executeUpdate();
              }
              // Proses penyimpanan Gagal
              catch (SQLException se) {
                System.out.println(se);
                JOptionPane.showMessageDialog(null,
                    "Kode yang Anda masukkan telah ada sebelumnya \nGagal disimpan.. Coba Lagi");
              }
              st.close();
            }
            catch (SQLException swl) {}
          }
          data_no_anggota.setEnabled(true);
          data_no_anggota.setText("");
          data_nama_anggota.setText("");
          data_tgl_kembali.setText("");
          data_tgl_pinjam.setText("");
          status_pinjam.setVisible(false);
          data_kode_buku.setEnabled(false);
          data_no_anggota.requestFocus();
          hapusTabel();
        }
      }
    });

    tabel_buku.addMouseListener(new MouseAdapter() {
      // Proses saat TABEL di klik
      public void mouseClicked(MouseEvent e) {
        tombol_hapus.setEnabled(true);
      }
    });

    tombol_hapus.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        int row = tabel_buku.getSelectedRow();
        int hapus = JOptionPane.showConfirmDialog(null,
            "Anda yakin ingin menghapus data peminjaman buku", "Konfirmasi",
                                                  JOptionPane.YES_NO_OPTION);
        tabMode.removeRow(row);
        data_kode_buku.setEnabled(true);
        data_kode_buku.requestFocus(true);
        tombol_hapus.setEnabled(false);
        tanggal();
      }
    });
  }

  public void tanggal() {
    int jml_buku = tabel_buku.getRowCount();
    if (jml_buku == 0) {
      data_tgl_pinjam.setText("");
      data_tgl_kembali.setText("");
    }
    else {
      Calendar kal = Calendar.getInstance();
      data_tgl_pinjam.setText(DateFormat.getDateInstance(DateFormat.LONG,
          Locale.UK).format(kal.getTime()));
      kal.add(kal.DAY_OF_MONTH, jml_buku * 3);
      data_tgl_kembali.setText(DateFormat.getDateInstance(DateFormat.LONG,
          Locale.UK).format(kal.getTime()));
    }
    if (jml_buku == 3) {
      data_kode_buku.setEnabled(false);
      tombol_simpan.requestFocus();
    }
  }

  public void hapusTabel() {
    int row = tabMode.getRowCount();
    for (int i = 0; i < row; i++) {
      tabMode.removeRow(0);
    }
    tombol_hapus.setEnabled(false);
    tombol_simpan.setEnabled(false);
  }

}